package com.ruoyi.statisticalCenter.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.domain.vo.InitTableVo;
import com.ruoyi.common.domain.vo.TableVo;
import com.ruoyi.common.service.TableService;
import com.ruoyi.logistic.domain.PageInfo;
import com.ruoyi.qualityControl.domain.ScOutBoundSendSheet;
import com.ruoyi.statisticalCenter.domain.ScOutBoundReturnSheetSet;
import com.ruoyi.statisticalCenter.domain.ScOutReturnSheet;
import com.ruoyi.statisticalCenter.domain.ScQualityControlFeeSheet;
import com.ruoyi.statisticalCenter.domain.vo.ScOutReturnSheetVo;
import com.ruoyi.statisticalCenter.enums.ScOutBoundReturnSheetSetEnum;
import com.ruoyi.statisticalCenter.mapper.ScOutBoundReturnSheetSetMapper;
import com.ruoyi.statisticalCenter.mapper.ScOutReturnSheetMapper;
import com.ruoyi.statisticalCenter.service.ScOutReturnSheetService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class ScOutReturnSheetServiceImpl implements ScOutReturnSheetService {
    @Autowired
    private ScOutReturnSheetMapper scOutReturnSheetMapper;
    @Autowired
    private ScOutBoundReturnSheetSetMapper scOutBoundReturnSheetSetMapper;
    @Autowired
    private TableService tableService;

    @Override
    public R collect(ScOutReturnSheetVo vo) {
        ScOutBoundReturnSheetSet scOutBoundReturnSheetSet = scOutBoundReturnSheetSetMapper.select();
        BeanUtils.copyProperties(scOutBoundReturnSheetSet, vo);
        PageHelper.startPage(vo.getPageDate());
        List<ScOutReturnSheet> collect = scOutReturnSheetMapper.collect(vo);
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("list", PageInfo.info(collect));
        jsonObject.put("fields", getTableVo());

        if (collect == null || collect.size() == 0) {
            return R.ok("暂无数据");
        } else {
            return R.ok(jsonObject);
        }
    }

    public List<TableVo> getTableVo() {
        List<TableVo> first = new ArrayList<>();
        TableVo firstTableVo = new TableVo();
        firstTableVo.setFields("name");
        firstTableVo.setTranslate("承包区名称");
        firstTableVo = new TableVo();
        firstTableVo.setFields("totalShipments");
        firstTableVo.setTranslate("发件票数合计");
        first.add(firstTableVo);
        firstTableVo = new TableVo();
        firstTableVo.setFields("totalRebateAmount");
        firstTableVo.setTranslate("返利金额合计");
        first.add(firstTableVo);
        firstTableVo = new TableVo();
        firstTableVo.setFields("singleTicketRebate");
        firstTableVo.setTranslate("单票返利");
        first.add(firstTableVo);
        firstTableVo = new TableVo();
        firstTableVo.setFields("exclusionAdjustment");
        firstTableVo.setTranslate("剔除数调整");
        first.add(firstTableVo);
        firstTableVo = new TableVo();
        firstTableVo.setFields("paymentContractAreaRebateTotal");
        firstTableVo.setTranslate("总部净返利合计");
        first.add(firstTableVo);
        firstTableVo = new TableVo();
        firstTableVo.setFields("singleTicketRebateTotal");
        firstTableVo.setTranslate("支付承包区返利合计");
        first.add(firstTableVo);
        firstTableVo = new TableVo();
        firstTableVo.setFields("rebateGrossProfit");
        firstTableVo.setTranslate("返利毛利");
        first.add(firstTableVo);

        first.add(firstTableVo);
        firstTableVo = new TableVo();
        firstTableVo.setFields("shouldReceipt");
        firstTableVo.setTranslate("应收总部金额");
        List<TableVo> second = new ArrayList<>();

        TableVo secondTableVo = new TableVo();
        secondTableVo.setFields("zeroToHalfKg");
        secondTableVo.setTranslate("0-0.5kg分档返利");
        List<TableVo> third = new ArrayList<>();
        String[] zeroToHalfKg = {"zeroToHalfKgShipments", "zeroToHalfKgPercentage", "zeroToHalfKgEliminateNum",
                "zeroToHalfKgPolicyQualified", "zeroToHalfKgRebateStandard", "zeroToHalfKgAmount"};
        InitTableVo initTableVo = new InitTableVo();
        initTableVo.setFields(zeroToHalfKg);
        initTableVo.setCode("scOutReturn");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();
        secondTableVo.setFields("halfTo1Kg");
        secondTableVo.setTranslate("0.5-1kg分档返利");
        third = new ArrayList<>();
        String[] halfTo1Kg = {"halfTo1KgShipments", "halfTo1KgPercentage", "halfTo1KgEliminateNum",
                "halfTo1KgPolicyQualified", "halfTo1KgRebateStandard", "halfTo1KgAmount"};
        initTableVo.setFields(halfTo1Kg);
        initTableVo.setCode("scOutReturn");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();
        secondTableVo.setFields("oneTo3Kg");
        secondTableVo.setTranslate("1-3kg分档返利");
        third = new ArrayList<>();
        String[] oneTo3Kg = {"oneTo3KgShipments", "oneTo3KgPercentage", "oneTo3KgEliminateNum",
                "oneTo3KgPolicyQualified", "oneTo3KgRebateStandard", "oneTo3KgAmount"};
        initTableVo.setFields(oneTo3Kg);
        initTableVo.setCode("scOutReturn");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();
        secondTableVo.setFields("threeToTenKg");
        secondTableVo.setTranslate("3-10kg分档返利");
        third = new ArrayList<>();
        String[] threeToTenKg = {"threeToTenKgShipments", "threeToTenKgPercentage", "threeToTenKgEliminateNum",
                "threeToTenKgPolicyQualified", "threeToTenKgRebateStandard", "threeToTenKgAmount"};
        initTableVo.setFields(threeToTenKg);
        initTableVo.setCode("scOutReturn");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();
        secondTableVo.setFields("tenTo399Kg");
        secondTableVo.setTranslate("10-399kg分档返利");
        third = new ArrayList<>();
        String[] tenTo399Kg = {"tenTo399KgShipments", "tenTo399KgPercentage", "tenTo399KgRebateStandard",
                "tenTo399KgAmount"};
        initTableVo.setFields(tenTo399Kg);
        initTableVo.setCode("scOutReturn");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();
        secondTableVo.setFields("XOverlayPolicyOneTo3Kg");
        secondTableVo.setTranslate("叠加返利1-3kg");
        third = new ArrayList<>();
        String[] XOverlayPolicyOneTo3Kg = {"XOverlayPolicyOneTo3KgShipments", "XOverlayPolicyOneTo3KgBase", "XOverlayPolicyOneTo3KgPolicyQualified",
                "XOverlayPolicyOneTo3KgRebateStandard", "XOverlayPolicyOneTo3KgPercentage", "XOverlayPolicyOneTo3KgAmount"};
        initTableVo.setFields(XOverlayPolicyOneTo3Kg);
        initTableVo.setCode("scOutReturn");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();
        secondTableVo.setFields("incrementalRebate0To1Kg");
        secondTableVo.setTranslate("增量返利0-1kg");
        third = new ArrayList<>();
        String[] incrementalRebate0To1Kg = {"incrementalRebate0To1KgShipmentCount", "incrementalRebate0To1KgDailyBasis", "incrementalRebate0To1KgPolicyCompliantTickets",
                "incrementalRebate0To1KgPolicyCompliantTickets", "incrementalRebate0To1KgRebateStandard", "incrementalRebate0To1KgAmount"};
        initTableVo.setFields(incrementalRebate0To1Kg);
        initTableVo.setCode("scOutReturn");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();
        secondTableVo.setFields("cumulativeRebate0To2Kg");
        secondTableVo.setTranslate("0-2kg叠加返利");
        third = new ArrayList<>();
        String[] cumulativeRebate0To2Kg = {"cumulativeRebate0To2KgShipmentCount", "cumulativeRebate0To2KgDailyBasis", "cumulativeRebate0To2KgExcludeTickets",
                "cumulativeRebate0To2KgPolicyCompliantTickets", "cumulativeRebate0To2KgRebateStandard", "cumulativeRebate0To2KgAmount"};
        initTableVo.setFields(cumulativeRebate0To2Kg);
        initTableVo.setCode("scOutReturn");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();
        secondTableVo.setFields("tieredAssessment0To1Kg");
        secondTableVo.setTranslate("0-1kg阶梯考核");
        third = new ArrayList<>();
        String[] tieredAssessment0To1Kg = {"tieredAssessment0To1KgShipmentCount", "tieredAssessment0To1KgDailyVolume", "tieredAssessment0To1KgAssessedVolume",
                "tieredAssessment0To1KgInsufficientVolume", "tieredAssessment0To1KgAssessmentStandard", "tieredAssessment0To1KgAmount"};
        initTableVo.setFields(tieredAssessment0To1Kg);
        initTableVo.setCode("scOutReturn");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();
        secondTableVo.setFields("businessAssessment0To999Kg");
        secondTableVo.setTranslate("0-999kg业务考核");
        third = new ArrayList<>();
        String[] businessAssessment0To999Kg = {"businessAssessment0To999KgShipmentCount", "businessAssessment0To999KgDailyVolume", "businessAssessment0To999KgAssessedVolume",
                "businessAssessment0To999KgInsufficientVolume", "businessAssessment0To999KgAssessmentStandard", "businessAssessment0To999KgAmount"};
        initTableVo.setFields(businessAssessment0To999Kg);
        initTableVo.setCode("scOutReturn");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();
        secondTableVo.setFields("oneToThreeKgRebateReceipt");
        secondTableVo.setTranslate("1-3kg一客一价返利");
        third = new ArrayList<>();
        String[] oneToThreeKgRebateReceipt = {"oneToThreeKgRebateShipmentCountReceipt", "oneToThreeKgRebateDailyVolumeReceipt", "oneToThreeKgRebateAssessedVolumeReceipt",
                "oneToThreeKgRebateRebateVolumeReceipt", "oneToThreeKgRebateRebateStandardReceipt", "oneToThreeKgRebateAmountReceipt"};
        initTableVo.setFields(oneToThreeKgRebateReceipt);
        initTableVo.setCode("scOutReturn");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        firstTableVo = new TableVo();
        firstTableVo.setFields("shouldPay");
        firstTableVo.setTranslate("应付承包区金额");
        secondTableVo = new TableVo();
        secondTableVo.setFields("zeroToHalfKgExceed");
        secondTableVo.setTranslate("0-0.5kg超基数返利");
        third = new ArrayList<>();
        String[] zeroToHalfKgExceed = {"zeroToHalfKgExceedBasePolicyQualified", "zeroToHalfKgExceedBasePolicyBase", "zeroToHalfKgExceedBasePolicyDifference",
                "zeroToHalfKgExceedBasePolicyRebateStandard", "zeroToHalfKgExceedBasePolicyRebate", "zeroToHalfKgExceedBasePolicyGrossProfit"};
        initTableVo.setFields(zeroToHalfKgExceed);
        initTableVo.setCode("scOutReturn");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);
        firstTableVo.setSunList(second);
        first.add(firstTableVo);

        secondTableVo = new TableVo();
        secondTableVo.setFields("halfTo1KgExceed");
        secondTableVo.setTranslate("0.5-1kg超基数返利");
        third = new ArrayList<>();
        String[] halfTo1KgExceed = {"halfTo1KgExceedBasePolicyQualified", "halfTo1KgExceedBasePolicyBase", "halfTo1KgExceedBasePolicyDifference",
                "halfTo1KgExceedBasePolicyRebateStandard", "halfTo1KgExceedBasePolicyRebate", "halfTo1KgExceedBasePolicyGrossProfit"};
        initTableVo.setFields(halfTo1KgExceed);
        initTableVo.setCode("scOutReturn");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();
        secondTableVo.setFields("oneTo3KgRebate");
        secondTableVo.setTranslate("1-3kg分档返利");
        third = new ArrayList<>();
        String[] oneTo3KgRebate = {"oneTo3KgRebatePolicyQualified", "oneTo3KgRebatePolicyRebateStandard", "oneTo3KgRebatePolicyRebate",
                "oneTo3KgRebatePolicyGrossProfit"};
        initTableVo.setFields(oneTo3KgRebate);
        initTableVo.setCode("scOutReturn");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();
        secondTableVo.setFields("threeTo999Kg");
        secondTableVo.setTranslate("3-999kg分档返利");
        third = new ArrayList<>();
        String[] threeTo999Kg = {"threeTo999KgRebatePolicyQualified", "threeTo999KgRebatePolicyRebateStandard", "threeTo999KgRebatePolicyRebate",
                "threeTo999KgRebatePolicyGrossProfit"};
        initTableVo.setFields(threeTo999Kg);
        initTableVo.setCode("scOutReturn");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();
        secondTableVo.setFields("oneToThreeKgAdd");
        secondTableVo.setTranslate("1-3kg叠加返利");
        third = new ArrayList<>();
        String[] oneToThreeKgAdd = {"oneToThreeKgAdditiveRebateCompliantTickets", "oneToThreeKgAdditiveRebateStandard", "oneToThreeKgAdditiveRebate",
                "oneToThreeKgAdditiveGrossProfit"};
        initTableVo.setFields(oneToThreeKgAdd);
        initTableVo.setCode("scOutReturn");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();
        secondTableVo.setFields("zeroToTwoKgAdd");
        secondTableVo.setTranslate("0-2kg叠加返利");
        third = new ArrayList<>();
        String[] zeroToTwoKgAdd = {"zeroToTwoKgAdditiveRebateCompliantTickets", "zeroToTwoKgAdditiveRebateStandard", "zeroToTwoKgAdditiveRebate",
                "zeroToTwoKgAdditiveGrossProfit"};
        initTableVo.setFields(zeroToTwoKgAdd);
        initTableVo.setCode("scOutReturn");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);

        secondTableVo = new TableVo();
        secondTableVo.setFields("oneToThreeKg");
        secondTableVo.setTranslate("1-3kg一客一价返利");
        third = new ArrayList<>();
        String[] oneToThreeKg = {"oneToThreeKgRebateShipmentCount", "oneToThreeKgRebateDailyVolume", "oneToThreeKgRebateAssessedVolume",
                "oneToThreeKgRebateRebateVolume", "oneToThreeKgRebateRebateStandard", "oneToThreeKgRebateRebate", "oneToThreeKgRebateGrossProfit"};
        initTableVo.setFields(oneToThreeKg);
        initTableVo.setCode("scOutReturn");
        third = tableService.initTable(initTableVo);
        secondTableVo.setSunList(third);
        second.add(secondTableVo);


        return first;
    }

    @Override
    public ScOutBoundReturnSheetSet select() {
        return scOutBoundReturnSheetSetMapper.select();
    }

    @Override
    public List<TableVo> initTable() {
        List<TableVo> list = new ArrayList<>();
        TableVo tableVo = new TableVo();
        String[] fields = {"zeroToZeroPointFiveStandard", "zeroPointFiveToOneStandard", "oneToThreeStandard", "threeToTenStandard", "moreThanTenStandard", "oneToThreeOverlayStandardReceipt"
                , "oneToThreeOverlayNumReceipt", "zeroToOneAddStandard", "zeroToOneAddNum", "zeroToTwoOverlayStandardReceipt", "zeroToOneLadderStandardReceipt", "zeroToOneLadderNumReceipt"
                , "allBusinessExamineStandard", "allBusinessExamineNum", "rejectionNumber", "oneClientOnePriceStandardReceipt", "oneClientOnePriceNumReceipt", "zeroToZeroPointFiveSuperStandard", "zeroToZeroPointFiveSuperNum", "zeroPointFiveToOneSuperStandard"
                , "oneToThreeSplitStandard", "moreThanThreeSplitStandard", "oneToThreeOverlayStandardPay", "zeroToTwoOverlayStandardPay", "oneClientOnePriceStandardPay", "oneClientOnePriceNumPay"};
        for (String field : fields) {
            tableVo = new TableVo();
            tableVo.setFields(field);
            list.add(tableVo);
        }
        for (TableVo vo : list) {
            vo.setTranslate(ScOutBoundReturnSheetSetEnum.getValue(vo.getFields()));
        }
        return list;
    }

    @Override
    public boolean update(ScOutBoundReturnSheetSet sheetSet) {
        return scOutBoundReturnSheetSetMapper.update(sheetSet);
    }
}
